/**
 * 防抖，延迟函数执行
 * @param {回调} callback 
 * @param {延迟} delay 
 * @returns 
 */
function debounce(callback, delay=300) {
    let timer = null;
    return function() {
        clearTimeout(timer);
        timer = setTimeout(() => {
            callback.apply(this);
        }, delay);
    }
}

/**
 * 节流，同一段时间内，函数只执行一次
 * @param {回调} callback 
 * @param {时间间隔} interval 
 * @returns 
 */
function throttle(callback, interval=300) {
    let flag = false;
    return function() {
        if (flag) return;
        flag = true;
        setTimeout(() => {
            callback.apply(this);
            flag = false;
        }, interval);
    }
}

export {
    debounce,
    throttle
}